import type { Plugin, UserConfig } from 'vite'

export function uniDirective(directive = ['v-$perms']): Plugin {
  return {
    name: 'vite-plugin-uni-directive',
    enforce: 'pre',
    transform(code, id) {
      if (id.endsWith('.vue')) {
        let tempCode = code
        directive.forEach((k) => {
          tempCode = replaceDirective(tempCode, k)
        })
        return tempCode
      }
    }
  }
}

function replaceDirective(source: string, p: string) {
  // 正则表达式
  const reg = new RegExp(`${p}:([^/<>\s]*)`, 'g')
  // 使用replace实现字符串替换
  // 这边的$n就是指捕获组()匹配的内容，索引是从1开始，我们这边只有一个，所以是$1，如果有
  // 多个，那就是$2，$3
  const [v_, func] = p.split('-')
  source = source.replace(reg, `v-if="${func}('$1')"`)
  return source
}
